# （文件读写）疯狂填词2.py

'''
创建一个疯狂填词（ Mad Libs）程序，它将读入文本文件， 并让用户在该文本
文件中出现 ADJECTIVE、 NOUN、 ADVERB 或 VERB 等单词的地方， 加上他们自
己的文本。例如，一个文本文件可能看起来像这样：
The ADJECTIVE panda walked to the NOUN and then VERB. A nearby NOUN was
unaffected by these events.
程序将找到这些出现的单词， 并提示用户取代它们。
Enter an adjective:
silly
Enter a noun:
chandelier
Enter a verb:
screamed
Enter a noun:
pickup truck
以下的文本文件将被创建：
The silly panda walked to the chandelier and then screamed. A nearby pickup
truck was unaffected by these events.
结果应该打印到屏幕上， 并保存为一个新的文本文件。
'''

import re


def mad_libs(filename_path, save_path):
    with open(filename_path, 'r') as strings:  # 相对路径下的文档
        words = strings.read()
    Regex = re.compile(r'\w[A-Z]+')  # \w ：匹配1个任何字母、数字或下划线
    finds = Regex.findall(words)
    for i in finds:
        replace = input('输入你想替换 {} 的单词:\n'.format(i))
        Regex2 = re.compile(i)
        words = Regex2.sub(replace, words, 1)  # 这个变量必须要是words与上面一致否则只打印最后替换的一个,可以画栈堆图跟踪这个变量的值
    print(words)

    # strings.close()  不用这一行，with 上下文管理器会自动关闭

    with open(save_path, 'a') as txt:
        txt.write(words + '\n')  # 分行写
        txt.close()

    # save_txt = open('保存疯狂填词文档.txt','a')
    # save_txt.write(words)
    # save_txt.close()


if __name__ == '__main__':
    filename_path = input('输入要替换的txt文本路径：')  # '疯狂填词原始文档.txt'
    save_path = input('输入要保存的文件路径(包含文件名称）:')  # '保存疯狂填词文档.txt'
    mad_libs(filename_path, save_path)